package com.io.copys;

import org.junit.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Example01 {
    public static void main(String[] args) {
        System.out.println("文件复制");
        //
    }

    // 文件拷贝
    @Test
    public void fileCopy() {
        /**
         * 把 E:\messi.jpeg 文件复制到 D盘
         * 复制步骤：
         * 1.创建文件输入流,读取文件内容
         * 2.创建文件输出流,写入文件内容
         * 3.关闭文件资源流
         */
        String srcFilePath = "E:\\messi.jpeg";
        // 目标路径
        String descFilePath = "D:\\messi.jpeg";

        // 1.创建输入流
        FileInputStream fileInputStream = null;
        // 2.创建输出流
        FileOutputStream fileOutputStream = null;
        // 3.创建字节数组
        byte[] buf = new byte[1024];

        int readDate = 0;
        try {
            fileInputStream = new FileInputStream(srcFilePath);
            fileOutputStream = new FileOutputStream(descFilePath);

            // 读取文件
            while ((readDate = fileInputStream.read(buf))!= -1) {
                // 写入文件
                /**
                 * length：表示实际读取的总字节长度
                 * 这里要注意：必须要使用 write（byte[],0,length）
                 * 如果把 length 写成 1024 会报错，因为可能最后一次
                 * 读取的字节长度不够1024，比如 1039 最后一次是 15，
                 * 那么写入1024，造成文件损坏，无法正常打开
                 */
                fileOutputStream.write(buf,0,readDate);
            }
            System.out.println("文件拷贝成功~");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 资源关闭
            try {
                fileInputStream.close();
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
